package thread;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 25397
 * Date: 2022-03-29
 * Time: 22:06
 */

//实现单例模式-懒汉模式
    class Singleton2{
        //1.不立即初始化实例
    private static volatile Singleton2 instance=null;
    //2.把构造方法设为private
    private Singleton2(){

    }
    //3.提供一个方法来获取到上述单例的实例
    //  只有当真正需要这个实例时，才创建
    public static Singleton2 getInstance(){
        if(instance==null){//如果这个条件成立，说明当前的单例未初始化过，存在线程安全问题，就需要加锁
            synchronized (Singleton2.class){
                //使用类对象作为锁对象——类对象在一个程序中只有一个
                //这样就能保证调用getinstance的时候针对的是同一个对象加锁

                //我们加锁是要把多个不是原子的操作变成一个原子的操作，
                //所以我们synchronized放if外面
                //如果你synchronized放if里面，那么if的读和里面的修改仍然是两个分割的个体
                if(instance ==null){
                    instance=new Singleton2();
                }
            }
        }
        return instance;
    }
}
public class Demo20 {
    public static void main(String[] args) {
        Singleton2 instance=Singleton2.getInstance();
    }
}
